﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;

namespace Calculalouca
{
    public class Calculadora : Scene
    {
        Background classBackground;

        Options option;

        int linha = 0;
        int coluna = 0;

        SpriteFont font;

        int number = 0;

        int[] valoresmatriz;
        Matriz resultado, ab, ac;

        Buttoncs buttonUp; // sobe linha
        Buttoncs buttonDown;// desce linha
        Buttoncs buttonUp2; // sobe coluna
        Buttoncs buttonDown2;// desce coluna

        public Calculadora(Game game) : base(game)
        {
            classBackground = new Background(game.Content.Load<Texture2D>("Bg_Calculadora"), Color.White);
            option = new Options(game.Content.Load<Texture2D>("Pixel"), Color.White);
            buttonUp = new Buttoncs(game.Content.Load<Texture2D>("CursorCima"), new Point(35, 382), new Point(15, 15));
            buttonDown = new Buttoncs(game.Content.Load<Texture2D>("CursorBaixo"), new Point(35, 414), new Point(15, 15));
            buttonUp2 = new Buttoncs(game.Content.Load<Texture2D>("CursorCima"), new Point(120, 382), new Point(15, 15));
            buttonDown2 = new Buttoncs(game.Content.Load<Texture2D>("CursorBaixo"), new Point(120, 414), new Point(15, 15));

            font = game.Content.Load<SpriteFont>("font");

            valoresmatriz = new int[4];
            valoresmatriz[0] = 10;
            valoresmatriz[1] = 20;
            valoresmatriz[2] = 30;
            valoresmatriz[3] = 40;
            ab = new Matriz(2, 2);
            ac = new Matriz(2, 2);
            ab.setValues(valoresmatriz);
            ac.setValues(valoresmatriz);
        }

        public override void Update(GameTime gameTime)
        {
            buttonUp.Update();
            buttonDown.Update();
            buttonUp2.Update();
            buttonDown2.Update();

            switch(option.operacaoSelecionada)
            {
                case Options.SelectedRect.SOMA:
                    Console.WriteLine(GerenciadorMatriz.SomarMatrizes(ab, ac));
                    LimitesSoma();
                    break;
                case Options.SelectedRect.SUBTRACAO:
                    Console.WriteLine(GerenciadorMatriz.SubatrairMatrizes(ab, ac));
                    LimitesSoma();
                    break;
                case Options.SelectedRect.MULTIPLICACAO:
                    if (number == 0)
                    {
                        Console.WriteLine(GerenciadorMatriz.MultiplicarMatrizesNumeral(ab, number));
                    }
                    else if(number == 1)
                    {
                        Console.WriteLine(GerenciadorMatriz.MultiplicarMatrizesPorMatrizes(ab, ac));
                    }
                    break;
                case Options.SelectedRect.OPOSTA:
                    Console.WriteLine(GerenciadorMatriz.OpostaMatrix(ab));
                    break;
                case Options.SelectedRect.TRANSPOSTA:
                    Console.WriteLine(GerenciadorMatriz.TranspostaMatrizes(ab));
                    break;
                case Options.SelectedRect.DETERMINANTE:
                    Console.WriteLine(GerenciadorMatriz.DeterminanteMatrizes(ab));
                    LimitesDeterminantes();
                    break;
            }

           

            Console.WriteLine(GerenciadorMatriz.DeterminanteMatrizes(ab));

            option.Update(gameTime);
        
            base.Update(gameTime);
        }

        public override void Draw(GameTime gameTime)
        {
            classBackground.Draw(gameTime, spriteBatch);            
            option.Draw(spriteBatch);

            if (Options.option2 == true)
            {
                buttonUp.Draw(spriteBatch);
                buttonDown.Draw(spriteBatch);
                buttonUp2.Draw(spriteBatch);
                buttonDown2.Draw(spriteBatch);

                spriteBatch.Begin();
                spriteBatch.DrawString(font, "" + linha, new Vector2(38, 392), Color.White);
                spriteBatch.DrawString(font, "" + coluna, new Vector2(122, 392), Color.White);
                spriteBatch.DrawString(font, "Linha", new Vector2(25, 357), Color.White);
                spriteBatch.DrawString(font, "Coluna", new Vector2(100, 357), Color.White);

                spriteBatch.DrawString(font, "Matriz1", new Vector2(50, 330), Color.White);
                spriteBatch.DrawString(font, "Matriz2", new Vector2(147, 330), Color.White);

                spriteBatch.End();
            }

            base.Draw(gameTime);
        }

        public void LimitesSoma()
        {
            if (buttonUp.released)
            {
                buttonUp.released = false;
                linha += 1;
                if (linha >= 8)
                {
                    linha = 8;
                }
            }
            if (buttonDown.released)
            {
                buttonDown.released = false;
                linha -= 1;
                if (linha <= 0)
                {
                    linha = 0;
                }
            }
            if (buttonUp2.released)
            {
                buttonUp2.released = false;
                coluna += 1;
                if (coluna >= 8)
                {
                    coluna = 8;
                }
            }
            if (buttonDown2.released)
            {
                buttonDown2.released = false;
                coluna -= 1;
                if (coluna <= 0)
                {
                    coluna = 0;
                }
            }
        }
        public void LimitesDeterminantes()
        {
            if (coluna > 3)
                coluna = 3;


            if (coluna < 2)
                coluna = 2;

            if (linha > 3)
                linha = 3;


            if (linha < 2)
                linha = 2;

            

            if (buttonUp.released)
            {
                buttonUp.released = false;
                linha += 1;
                coluna = linha;
            }
            if (buttonDown.released)
            {
                buttonDown.released = false;
                linha -= 1;
                coluna = linha;
            }
            if (buttonUp2.released)
            {
                buttonUp2.released = false;
                coluna += 1;
                linha = coluna;
            }
            if (buttonDown2.released)
            {
                buttonDown2.released = false;
                coluna -= 1;
                linha = coluna;
            }
        }


    }
}
